home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / m2 / ModGen.lha / ModGen / ModGen.dok < prev    next >
Text File  |  1995-04-20  |  11KB  |  260 lines

  1. Dokumentation zum Programm
  2.  
  3.                                 ______
  4.       /|   /|                / /
  5.      / |  / |   ____   ____ / / ____  ____  ____
  6.     /  | /  |  /    / /    / /     / /___/ /   /
  7.    /   |/   | /____/ /____/ /_____/ /___  /   /    V1.0
  8.  
  9.                                           (c) 1995 by Frank Lömker
  10.  
  11.  E-Mail: floemker@techfak.uni-bielefeld.de
  12.  
  13. ModGen basiert direkt auf
  14.   - OG V37.11 von Thomas Igracki und
  15.   - GenOberon V1.0 von Kai Bolay und Jan van den Baard.
  16.  
  17. Copyright:
  18. ~~~~~~~~~
  19.  Das Programm ist Freeware. Es darf frei kopiert werden. Es ist aber nicht
  20.  erlaubt, es zu kommerziellen Zwecken zu benutzen. Dazu gehört auch ein
  21.  Diskettenpreis von über 5 DM ! Änderungen müssen dokumentiert werden.
  22.  
  23. Libraries:
  24. ~~~~~~~~~
  25.  Das Programm benötigt die folgenden externen Libraries:
  26.     - reqtools.library  V38    ( (c) by Nico François )
  27.     - nofrag.library  V2       ( (c) by Jan van den Baard )
  28.     - gadtoolsbox.library  V39 ( (c) by Jan van den Baard )
  29.  Sollen gepackte Dateien geladen werden, wird die Library
  30.     - powerpacker.library  V35 ( (c) by Nico François )
  31.  benötigt.
  32.  
  33. Programm:
  34. ~~~~~~~~
  35.  Das Programm ModGen ist ein Modula SourceCodeGenerator für GadToolsBox ab
  36.  Version 2.0. Es erzeugt Code für den Compiler Turbo Modula-2 V1.40 von
  37.  Amritpal Mann.
  38.  
  39.  Von der Workbench können ModGen bis zu 3 Parameter übergeben werden. Der 1.
  40.  Parameter ist das zu konvertierende GUI-File, der 2. der Name des zu erzeu-
  41.  genden Sourcecodes und der 3. der Name des zu erzeugenden Sourcecodes für
  42.  den Screen, falls hierfür eine Extradatei angelegt werden soll.
  43.  
  44.  Von der Shell sieht der Aufruf wie folgt aus:
  45.    Format: ModGen [<GUIFile>] [<DestFile>] [<ScreenFile>] [OPENFONT]
  46.                   [SYSFONT] [RASTER] [UNDERMOUSE] [PORT] [ICON] [NOGUI]
  47.                   [OPT OSRUPI]
  48.    Schablone: NAME,TO=AS,SCREEN,OPENFONT/S,SYSFONT/S,RASTER/S,UNDERMOUSE/S,
  49.               PORT/S,ICON/S,NOGUI/S,OPT/K
  50.  
  51.    Die ersten 3 Parameter ([<GUIFile>] [<DestFile>] [<ScreenFile>]) sind da-
  52.    bei identisch zu den Workbench-Parametern.
  53.    NOGUI bewirkt, das kein Fenster geöffnet wird. Wird NOGUI nicht angege-
  54.    ben, werden die restlichen Optionen (OPENFONT - ICON bzw. OPT) ignoriert.
  55.    Die einzelnen Optionen bewirken:
  56.     OPENFONT oder OPT O
  57.       Ist die Option "Font Adaptive" bei den Preferences von GadToolsBox
  58.       für das GUI-File nicht gewählt und wird ein DiskFont benutzt, wird
  59.       auch Code erzeugt, der den Font öffnet und schließt.
  60.     SYSFONT oder OPT S
  61.       Ist die Option "Font Adaptive" bei den Preferences von GadToolsBox
  62.       für das GUI-File gewählt, bewirkt die Angabe dieser Option, daß der
  63.       System Default Font benutzt wird. Wird die Option nicht angegeben,
  64.       wird der Screen Font benutzt.
  65.     RASTER oder OPT R
  66.       Die generierten Fenster werden mit einem Raster gefült, das auch von
  67.       GadToolsBox und den AutoRequestern der Workbench benutzt wird (und
  68.       auch von ModGen).
  69.     UNDERMOUSE oder OPT U
  70.       Die generierten Fenster werden unter der Maus geöffnet.
  71.     PORT oder OPT P
  72.       Für die generierten Fenster wird nur ein MessagePort angelegt.
  73.       Die Messages können also für alle Fenster an diesem einen Port
  74.       abgefragt werden.
  75.     ICON oder OPT I
  76.       Die generierten Dateien werden, falls sie noch kein Icon hatten, mit
  77.       dem Icon "Modula:Icons/txt" gespeichert.
  78.  
  79.  Wird NOGUI nicht angegeben oder wird das Programm über die Workbench ge-
  80.  started, werden zuerst die Preferences (die Einstellungen der Optionen
  81.  OPENFONT - ICON) aus der Datei "ENV:GadToolsBox/GenMod.prefs" geladen. Da-
  82.  nach wird ein Fenster geöffnet, über das das Programm gesteuert wird. Die
  83.  Einstellungen sind hier:
  84.    Source, Dest, Screen
  85.      Die hier einzugebenden Namen entsprechen den 3 Parametern von der
  86.      Workbench. Mit den kleinen Gadgets neben den Stringgadgets wird ein
  87.      Filerequester geöffnet, über den der jeweilige Name per Maus gewählt
  88.      werden kann.
  89.    Preferences
  90.      Hier können die gleichen Optionen ein- bzw. ausgeschaltet werden, die
  91.      auch von der Shell angegeben werden können (siehe oben).
  92.    Windows
  93.      Hier werden, nachdem bei Source ein GUI-File angegeben wurde, die ge-
  94.      nerierten Fenster und der Screen aufgelistet. Soll nur ein Teil des
  95.      Codes erzeugt werden, kann hier der Bereich gewählt werden.
  96.    from
  97.      Ist dieses Gadget aktiv, kann bei den Windows die erste Grenze des Be-
  98.      reiches gewählt werden, der abgespeichert werden soll.
  99.    to
  100.      Ist dieses Gadget aktiv, kann bei den Windows die zweite Grenze des Be-
  101.      reiches gewählt werden, der abgespeichert werden soll.
  102.    All
  103.      Wird dieses Gadget gewählt, wird der komplette Sourcecode (alle Windows
  104.      und der Screen) in der Datei <Dest> erzeugt.
  105.    Selected
  106.      Wird dieses Gadget gewählt, wird Sourcecode für den bei from und to
  107.      ausgewählten Bereich erzeugt. Ist hier der Screen enthalten, wird die-
  108.      ser unter dem Namen <Screen> gespeichert, der restliche Code wird in
  109.      der Datei <Dest> abgelegt. Dieser Code imporiert den Teil für den
  110.      Screen aus der Datei <Screen>, so daß der Name auch nötig ist, wenn der
  111.      Screen nicht gespeichert wird.
  112.    SavePref
  113.      Hier werden die Preferences in den Dateien
  114.      "ENV:GadToolsBox/GenMod.prefs" und "ENVARC:GadToolsBox/GenMod.prefs"
  115.      abgespeichert.
  116.    About
  117.      Es werden Informationen über das Programm angezeigt.
  118.    Quit und Closegadget
  119.      Das Programm wird beendet.
  120.  
  121. Generierter Code:
  122. ~~~~~~~~~~~~~~~~
  123.  Wird das GETFILE-Gadget benutzt, imporiert der generierte Code das Modul
  124.  GetFile. Beim Linken muß dann das Objektfile "InitGetC.o" mit angegeben
  125.  werden. Dieses enthält den Dispatcher für das BOOPSI-Image.
  126.  
  127.  Ab hier bedeuten:
  128.    <Project-Name> Name, der im Edit Data Requester vom Windowmenu eingegeben
  129.                   wurde
  130.    <Gadget-Label> Name, der in einem Label Gadget von einem der Gadget Kind
  131.                   Requester eingegeben wurde
  132.    <Menu-Label>   Name, der im Label Gadget vom Menu Editor eingegeben wurde
  133.  
  134.  An exportierten Routinen werden generiert:
  135.  
  136.  PROCEDURE SetupScreen (): INTEGER , bei einem Customscreen und der Workbench
  137.  PROCEDURE SetupScreen (pub:y.ADDRESS): INTEGER   bei einem Publicscreen
  138.    Diese Procedure öffnet bzw. locked den Screen und besorgt seinen Visual
  139.    Info. Auf verlangen wird der benutzte Font geöffnet. Wird ein GETFILE-
  140.    Gadget benutzt, wird auch die Initialisierung des BOOPSI Image getestet.
  141.    Diese Routine befindet sich im File <Screen>, wenn beim generieren des
  142.    Codes Selected gewählt wurde.
  143.    Die RETURN Codes:
  144.       0  kein Fehler.
  145.       1  Konnte Screen nicht öffnen bzw. locken.
  146.       2  Konnte Visual Info nicht bekommen.
  147.       3  Konnte Font nicht öffnen.
  148.       4  Konnte BOOPSI Image nicht initialisieren.
  149.  
  150.  PROCEDURE CloseDownScreen;
  151.    Diese Procedure gibt die Resourcen von SetupScreen frei. Diese Routine
  152.    muß auch dann aufgerufen werden, wenn SetupScreen einen Fehler gemeldet
  153.    hat.
  154.    Diese Routine befindet sich im File <Screen>, wenn beim generieren des
  155.    Codes Selected gewählt wurde.
  156.  
  157.  PROCEDURE Create<Project-Name>Gadgets (): INTEGER;
  158.    Für jedes generierte Fenster mit Gadgets gibt es eine dieser Routinen.
  159.    Diese Routinen legen die Gadgets an.
  160.    Die RETURN Codes:
  161.       0  Kein Fehler.
  162.       1  Konnte Gadget Context nicht anlegen.
  163.       2  Konnte Gadgets nicht anlegen.
  164.       7  Konnte BOOPSI Image nicht initialisieren.
  165.       8  CloneTagItems nicht möglich.
  166.  
  167.  PROCEDURE Open<Project-Name>Window (createGads: BOOLAN): INTEGER;
  168.                          bei einem Fenster mit Gadgets
  169.  PROCEDURE Open<Project-Name>Window (): INTEGER;
  170.                          bei einem Fenster ohne Gadgets
  171.    Für jedes generierte Fenster gibt es eine dieser Routinen. Diese Routinen
  172.    legen die Gadgets (falls verlangt und vorhanden) und die Menues an und
  173.    öffnen die Fenster.
  174.    Die RETURN Codes:
  175.       0  Kein Fehler.
  176.       1  Konnte Gadget Context nicht anlegen.
  177.       2  Konnte Gadgets nicht anlegen.
  178.       3  Konnte Menues nicht anlegen.
  179.       4  LayoutMenus nicht möglich.
  180.       5  Konnte SystemFont nicht öffnen (bei Option SYSFONT).
  181.       6  SetMenuStrip nicht möglich.
  182.       7  Konnte BOOPSI Image nicht initialisieren.
  183.       8  CloneTagItems nicht möglich.
  184.      20  Konnte Fenster nicht öffnen.
  185.  
  186.  PROCEDURE Close<Project-Name>Window;
  187.    Für jedes generierte Fenster gibt es eine dieser Routinen.
  188.    Diese Procedure gibt die Resourcen von Open<Project-Name>Window frei.
  189.    Diese Routine muß auch dann aufgerufen werden, wenn
  190.    Open<Project-Name>Window einen Fehler gemeldet hat.
  191.  
  192.  PROCEDURE <Project-Name>Render;
  193.    Für jedes generierte Fenster, das IntuiTexte oder BevelBoxen enthält oder
  194.    für das die Option RASTER an war, gibt es eine dieser Routinen, die die
  195.    Texte und BevelBoxen anzeigen und den Hintergrund neu generieren. Diese
  196.    Routine muß vom Hauptprogramm aufgerufen werden, wenn es die Message
  197.    REFRESHWINDOW am Windowport erhält. Dies muß zwischen den Aufrufen von
  198.    GT_BeginRefresh und GT_EndRefresh geschehen. Ein Beispiel:
  199.      IF REFRESHWINDOW <= Class THEN
  200.        GT_BeginRefresh (<Project-Name>Wnd);
  201.        <Project-Name>Render;
  202.        GT_EndRefresh (<Project-Name>Wnd,TRUE);
  203.      END;
  204.  
  205.  Weiterhin werden folgende globalen Variablen und Konstanten angelegt:
  206.  
  207.    Die Variablen Scr, VisualInfo, Font, Attr und Topaz80 befindet sich im
  208.    File <Screen>, wenn beim generieren des Codes Selected gewählt wurde.
  209.  
  210.    Scr: I.ScreenPtr;         Zeiger auf den geöffneten bzw. gelockten Screen
  211.    VisualInfo: y.ADDRESS;    Zeiger zum Visual Info des Screens
  212.  
  213.  Die folgenden Variablen werden nur angelegt, wenn Gadgets bzw. Menues
  214.  existieren, wenn der benutzte Font geöffnet wird bzw. wenn das Fenster ein
  215.  ZoomGadget hat:
  216.  
  217.    <Project-Name>GList: I.GadgetPtr;            Die generierten Gadgets
  218.    <Project-Name>Menus: I.MenuPtr;              Die Menues
  219.    <Project-Name>Zoom: ARRAY [0..3] OF INTEGER; 2. Fensterposition
  220.    Topaz80: g.TextAttr;
  221.    Attr: g.TextAttr;                            Der geöffnete Font
  222.    Font: g.TextAttrPtr;                         Zeiger auf geöffneten Font
  223.  
  224.  Für jedes Fenster wird ein Zeiger auf das Fenster angelegt:
  225.  
  226.    <Project-Name>Wnd: I.WindowPtr;
  227.  
  228.  Die Fensterposition und Größe wird in den folgenden Variablen abgelegt:
  229.  
  230.    <Project-Name>Left     Linke Ecke
  231.    <Project-Name>Top      Obere Ecke
  232.    <Project-Name>Width    Breite
  233.    <Project-Name>Height   Höhe
  234.  
  235.    Diese werden im Hauptteil des generierten Modules initialisiert.
  236.  
  237.  Die Zeiger auf die Gadgets für jedes Fenster werden in folgenden Arrays
  238.  angelegt:
  239.  
  240.    <Project-Name>Gadgets: ARRAY [0..<Project-Name>CNT-1] OF I.GadgetPtr;
  241.  
  242.    Die Konstante <Project-Name>CNT gibt dabei die Anzahl der Gadgets in dem
  243.    jeweiligen Fenster an.
  244.  
  245.  Um auf die Zeiger in dem Array zuzugreifen, werden die folgenden Konstanten
  246.  erzeugt, die die Position des Gadgets in dem Array angeben:
  247.  
  248.    GD<Gadget-Label>
  249.  
  250.  Die unterstrichenen Buchstaben aller Gadgets werden in dem String
  251.  <Project-Name>HotKeys angegeben.
  252.  
  253. Neucompilierung:
  254. ~~~~~~~~~~~~~~~
  255.  Compiliert werden kann ModGen folgendermaßen:
  256.  
  257.    m2b ModGen gtxs.lib nofrags.lib rqtoolss.lib InitGetC.o
  258.  
  259.  Frank
  260.